package cn.dida.service;

import java.util.List;

import cn.dida.model.Pageable;
import cn.dida.model.Staff;
import cn.dida.model.Sysres;

/**
 * 账户管理 业务层接口
 * @author weiwei
 */
public interface StaffService {
	/**
	 * 根据用户名和密码获取用户
	 * @param account 账户名
	 * @param pwd 密码
	 * @return Staff 账户
	 * */
    public Staff getStaff(String account, String pwd);

    /**
   	 * 根据用户名获取用户
   	 * @param account 账户名
   	 * @return Staff 账户
   	 * */
    public Staff getStaff(String account);

    /**
   	 * 根据公司id和账户id获取用户
   	 * @param companyId 公司id
   	 * @param staffId 账户id
   	 * @return Staff 账户
   	 * */
    public Staff getStaff(Integer companyId, Integer staffId);

    /**
     * 根据公司id和账户id获取系统资源
     * @param companyId 公司id
   	 * @param staffId 账户id
   	 * @return List<Sysres> 系统资源集合
     * */
    public List<Sysres> getStaffRes(Integer companyId, Integer staffId);

    /**
     * 账户管理列表
     * @param companyId 公司id
     * @param keyword 查询条件
     * @param state 账户状态,1正常，2停用
     * @param page 分页游标
     * @return Pageable<Staff> 账户管理分页列表
     * */
    public Pageable<Staff> queryStaff(Integer companyId, String keyword, Integer state, int page);
    /**
     * 账户管理列表（数据导出用）
     * @param companyId 所属公司id
     * @param keyword 查询条件
     * @param state 账户状态：1正常，2停用
     * @return List<Staff> 账户列表
     * @date 2016-12-08 14:11
     * */
    public List<Staff> queryStaffForExport(Integer companyId, String keyword, Integer state);

    /**
     * 新增账户
     * @param staff 账户实体信息
     * @return int 受影响的记录行数
     * */
    public Boolean insertStaff(Staff staff);
    /**
     * 更新账户
     * @param staff 账户实体信息
     * @return int 受影响的记录行数
     * */
    public Boolean updateStaff(Staff staff);

    /**
     * 更新账户权限
     * @param companyId 公司id
     * @param staffId 账户id
     * @param authIds 权限id
     * @return Boolean ,true更新成功，false更新失败
     * */
    public Boolean updateStaffAuth(Integer companyId, Integer staffId, Integer... authIds);

    /**
     * 删除账户
     * @param companyId 公司id
     * @param id 账户id
     * @return Boolean true删除成功，false删除失败
     * */
    public Boolean deleteStaff(Integer companyId, Integer id);
    /**
     * 账户密码重置
     * @param companyId 公司id（被重置用户的）
     * @param id 账户id（被重置用户的）
     * @return int 受影响的记录行数
     */
    public int resetPassword(Integer companyId, Integer id);
    /**
     * 校验原密码（修改密码时使用）
     * @param companyId 公司id
     * @param id 帐户id
     * @param oldPassword 原密码
     * @return int 0输入的原密码不正确，1输入的原密码正确
     */
    public int checkOldPassword(Integer companyId,Integer id,String oldPassword);
    /**
     * 修改密码
     * @param companyId 当前登录用户 公司id
     * @param id 当前登录用户 账户id
     * @param password 新密码
     * @return int 受影响的记录行数
     */
    public int editPassword(Integer companyId,Integer id, String newPassword);
}
